package main.java.LeetCode.ClassicalAlgorithm.Enum;


/**
 * 二进制枚举
 */
public class BinaryEnum {

    /**
     * 给定数字集合nums，选择其中的某些数，使其相加的和等于target，求出共有多少种解法
     */
    public static int doEnum(int n,int target,int[] nums){

        int length = nums.length;
        int counter = 0;
        int rs = 0;

        /*
          a<<b = a*2^b;
          1<<n = 2^n,n个数值总共有2^n种可能
         */
        for(int i = 0;i<(1<<length);i++){
            int sum = 0;

            for(int j = 0;j < length;j++){
                if((i&(1<<j))!=0) {
                    sum = sum + nums[j];
                    counter++;
                }
            }

            if(sum == target)
                rs++;

        }
        return rs;
    }
}
